#ifndef CUSTOM_PLAYER_H_INCLUDED
#define CUSTOM_PLAYER_H_INCLUDED

#include "FieldCoord.h"
#include "EdgeCoord.h"
#include "VertexCoord.h"

#include "FieldInformation.h"
#include "EdgeInformation.h"
#include "VertexInformation.h"
#include "SettlementInformation.h"
#include "AttackResultInformation.h"

#include "ResourcePackage.h"

#include "Player.h"

#include "AttackFailedException.h"
#include "BuildingFailedException.h"
#include "DevelopmentFailedException.h"
#include "TrainingFailedException.h"
#include "NotEnoughResourcesException.h"
#include "CoordOutOfBoundsException.h"
#include "IllFormedCoordException.h"
#include "NotReachableException.h"
#include "NotVisibleException.h"

#include <set>
#include <queue>

namespace Custom
{
    class CustomPlayer : public Player
    {
		unsigned steps;
		std::multiset<FieldCoord> myFields;
		std::vector<SettlementInformation> myTowns;
		std::queue<EdgeCoord> plannedRoads;
		std::queue<VertexCoord> plannedTowns;

		std::vector<VertexCoord> atDistanceFromMyTowns(unsigned d = 2);
		std::vector<VertexCoord> atDistanceFrom(const VertexCoord& vertex, unsigned d);
		double value(const VertexCoord& vertex);
		unsigned distance(const VertexCoord& vertex1, const VertexCoord& vertex2);
		std::vector<VertexCoord> allTowns ();


		public:
        CustomPlayer( );
        void act( );
        void init( );
		
    };
}

#endif // CUSTOM_PLAYER_H_INCLUDED
